import os
import sys
import json
from openai import OpenAI
from openai import (
    AuthenticationError,  # 密钥错误/认证失败
    APIError,              # API服务端错误
    BadRequestError        # 请求参数错误（如模型不存在）
)

# 添加项目根目录到Python路径，以便导入config_reader模块
current_dir = os.path.dirname(os.path.abspath(__file__))
project_root = os.path.dirname(os.path.dirname(current_dir))
sys.path.append(project_root)

from config_reader import get_deepseek_api_key

def translate_to_language(source_text: str, target_language: str, examples: str) -> str:
    """
    功能：根据给定示例格式，调用DeepSeek v3将指定文本翻译成目标语言，返回JSON格式的翻译结果
    参数：
        source_text: 待翻译的源文本（如"谢谢"）
        target_language: 目标语言（如"西班牙语"）
        examples: 翻译示例模板（用于规范模型输出格式）
    返回：
        成功：格式化后的翻译结果字符串（含源文本、目标语言、译文）
        失败：对应的错误提示信息
    """
    # 1. 安全读取API密钥（从配置文件获取DeepSeek API密钥）
    try:
        api_key = get_deepseek_api_key()
        client = OpenAI(api_key=api_key, base_url="https://api.deepseek.com")
    except Exception as e:
        return f"❌ 错误：无法获取DeepSeek API密钥，请检查配置文件：{str(e)}"

    # 2. 构建完整用户提示词（补充格式约束，避免模型输出多余内容）
    user_content = f"""{examples}
# 格式要求
1. 严格按照上述示例的JSON结构输出，仅包含"translation"字段，不添加任何额外文本（如解释、换行说明）
2. 译文需准确无误，符合目标语言的日常表达习惯
3. 若目标语言有特殊字符（如日语假名、西班牙语重音），需完整保留

# 当前翻译需求
用户：翻译'{source_text}'成{target_language}"""

    try:
        # 3. 调用DeepSeek API（控制随机性，确保格式稳定）
        response = client.chat.completions.create(
            model="deepseek-chat",  # 使用DeepSeek v3模型
            messages=[{"role": "user", "content": user_content}],
            temperature=0.1,  # 低随机性（翻译需精准，避免创意化输出）
            max_tokens=100,   # 控制长度（仅输出JSON，无需过长内容）
            timeout=15        # 超时保护（避免长时间阻塞）
        )

        # 4. 提取并清理模型输出（去除多余空格、换行，防止JSON解析失败）
        raw_output = response.choices[0].message.content.strip()
        print(f"🔍 模型原始输出：{raw_output}")  # 调试用，可根据需求删除

        # 5. 解析JSON格式（校验是否符合示例要求）
        try:
            translation_result = json.loads(raw_output)
            # 检查是否包含必需的"translation"字段
            if "translation" not in translation_result:
                return f"❌ 错误：模型输出缺少'translation'字段，原始内容：{raw_output}"
        except json.JSONDecodeError as e:
            return f"❌ 错误：模型输出不是合法JSON格式，错误信息：{str(e)}，原始内容：{raw_output}"

        # 6. 格式化最终结果（提升可读性）
        formatted_result = f"""
✅ 翻译完成！
- 源文本：{source_text}
- 目标语言：{target_language}
- 译文：{translation_result['translation']}
- 完整JSON结果：{json.dumps(translation_result, ensure_ascii=False, indent=2)}
        """
        return formatted_result

    # 7. 捕获各类API调用异常（给出明确可排查的提示）
    except AuthenticationError:
        return "❌ 认证失败：DeepSeek API密钥无效或已过期，请检查密钥正确性"
    except BadRequestError as e:
        return f"❌ 请求参数错误：{str(e)}（可能是模型名称错误或输入文本过长）"
    except APIError as e:
        return f"❌ DeepSeek API服务错误：{str(e)}（可查看DeepSeek官网状态页确认服务是否正常）"
    except Exception as e:
        return f"❌ 未知错误：{str(e)}（建议检查网络连接或重新尝试）"

# ------------------- 示例调用 -------------------
if __name__ == "__main__":
    # 1. 定义翻译示例模板（用户提供的示例，可复用）
    translation_examples = """
用户：翻译"Hello world"成法语
助手：{"translation": "Bonjour le monde"}
用户：翻译"Good morning"成日语 
助手：{"translation": "おはようございます"}
    """

    # 2. 设定当前翻译需求（可根据需要修改源文本和目标语言）
    source = "谢谢"
    target_lang = "西班牙语"

    # 3. 调用函数并打印结果
    result = translate_to_language(source_text=source, target_language=target_lang, examples=translation_examples)
    print(result)